package com.xuzm.netty.operator;

import cn.hutool.core.util.StrUtil;
import com.xuzm.netty.dto.RunDataDto;
import com.xuzm.netty.operator.event.NettyMsgCustomEvent;
import io.netty.channel.ChannelHandlerContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Objects;

@Component
@Slf4j
public class ServerHandlerReadOperator extends ServerHandlerOperator{
    @Autowired
    private ApplicationContext context;

    @Override
    public void exec(ChannelHandlerContext ctx, Object msg) {
        // 处理接收到的消息；日数据接收量，日有效数据接收量，最后发送消息时间
        String addr = getClientAddr(ctx);
        log.info("------客服端 {}  =>当前消息 {}-----", addr, msg);
        // 发布客服端的消息
        context.publishEvent(new NettyMsgCustomEvent(ctx, Objects.isNull(msg)? "": msg.toString()));
        RunDataDto runDataDto = getDtoMap().get(addr);
        Date now = new Date();
        if(runDataDto == null){
           // 切换时可能存在第一次执行
            runDataDto = new RunDataDto();
            runDataDto.setAddr(addr);
            runDataDto.setCurrentStatus(RunDataDto.Status.ON_LINE.getCode());
            runDataDto.setConnectTime(now);
            getDtoMap().put(addr, runDataDto);
        }
        runDataDto.getDayDataCount().incrementAndGet();

        // TODO: 2024/7/11 解析AIS信息
        String mmsi = "";
        if("client2".equals(msg)){
            mmsi = "199339";
        }
        if(StrUtil.isEmpty(mmsi)) {
            return;
        }
        runDataDto.setMmsi(mmsi);
        runDataDto.getDayValidDataCount().incrementAndGet();
        runDataDto.setLastSendDataTime(now);

    }
}
